package com.coursehub.course.service;

import com.coursehub.course.dto.CourseCreateDto;
import com.coursehub.course.dto.CourseUpdateDto;
import com.coursehub.course.entity.Course;

import java.util.List;

/**
 * 课程服务接口
 */
public interface CourseService {
    
    /**
     * 创建课程
     */
    Course createCourse(CourseCreateDto createDto);
    
    /**
     * 根据ID获取课程
     */
    Course getCourseById(String courseId);
    
    /**
     * 获取所有课程
     */
    List<Course> getAllCourses();
    
    /**
     * 更新课程信息
     */
    Course updateCourse(String courseId, CourseUpdateDto updateDto);
    
    /**
     * 删除课程
     */
    void deleteCourse(String courseId);
    
    /**
     * 根据课程名称模糊查询
     */
    List<Course> searchCoursesByName(String courseName);
    
    /**
     * 根据考核方式查询课程
     */
    List<Course> getCoursesByExaminationMethod(String examinationMethod);
    
    /**
     * 检查课程是否存在
     */
    boolean existsByCourseId(String courseId);
    
    /**
     * 检查课程名称是否存在
     */
    boolean existsByCourseName(String courseName);
    
    /**
     * 根据多个条件查询课程
     */
    List<Course> searchCourses(String courseName, String examinationMethod);
    
    /**
     * 验证用户是否有权限操作课程（通过调用用户服务）
     */
    boolean validateUserPermission(String userId, String courseId);
    
    /**
     * 获取课程的所有教师
     */
    List<String> getTeachersInCourse(String courseId);
    
    /**
     * 获取课程的所有学生
     */
    List<String> getStudentsInCourse(String courseId);
    
    /**
     * 验证学生是否选修了该课程
     */
    boolean isStudentEnrolledInCourse(String courseId, String studentId);
    
    /**
     * 添加教师到课程
     */
    void addTeacherToCourse(String courseId, String userId);
    
    /**
     * 从课程中移除教师
     */
    void removeTeacherFromCourse(String courseId, String userId);
    
    /**
     * 根据用户ID和角色获取课程列表
     */
    List<Course> getCoursesByUserIdAndRole(String userId, String role);
}